9.4. 字符串函数和操作符 您所在的位置:网站首页 字符串25 3和8 9.4. 字符串函数和操作符

9.4. 字符串函数和操作符

2024-05-17 15:55| 来源: 网络整理| 查看: 265

9.4.1. format

函数format根据一个格式字符串产生格式化的输出,其形式类似于 C 函数sprintf。

format(formatstr text [, formatarg "any" [, ...] ])

formatstr是一个格式字符串,它指定了结果应该如何被格式化。格式字符串中的文本被直接复制到结果中,除了使用格式说明符的地方。格式说明符在字符串中扮演着占位符的角色,它定义后续的函数参数如何被格式化及插入到结果中。每一个formatarg参数会被根据其数据类型的常规输出规则转换为文本,并接着根据格式说明符被格式化和插入到结果字符串中。

格式说明符由一个%字符开始并且有这样的形式

%[position][flags][width]type

其中的各组件域是:

position(可选)

一个形式为n$的字符串,其中n是要打印的参数的索引。索引 1 表示formatstr之后的第一个参数。如果position被忽略,默认会使用序列中的下一个参数。

flags(可选)

控制格式说明符的输出如何被格式化的附加选项。当前唯一支持的标志是一个负号(-),它将导致格式说明符的输出会被左对齐(left-justified)。除非width域也被指定,否者这个域不会产生任何效果。

width(可选)

指定用于显示格式说明符输出的最小字符数。输出将被在左部或右部(取决于-标志)用空格填充以保证充满该宽度。太小的宽度设置不会导致输出被截断,但是会被简单地忽略。宽度可以使用下列形式之一指定:一个正整数;一个星号(*)表示使用下一个函数参数作为宽度;或者一个形式为*n$的字符串表示使用第n个函数参数作为宽度。

如果宽度来自于一个函数参数,则参数在被格式说明符的值使用之前就被消耗掉了。如果宽度参数是负值,结果会在长度为abs(width)的域中被左对齐(如果-标志被指定)。

type(必需)

格式转换的类型,用于产生格式说明符的输出。支持下面的类型:

s将参数值格式化为一个简单字符串。一个控制被视为一个空字符串。

I将参数值视作 SQL 标识符,并在必要时用双写引号包围它。如果参数为空,将会是一个错误(等效于quote_ident)。

L将参数值引用为 SQL 文字。一个空值将被显示为不带引号的字符串NULL(等效于quote_nullable)。

除了以上所述的格式说明符之外,要输出一个文字形式的%字符,可以使用特殊序列%%。

下面有一些基本的格式转换的例子:

SELECT format('Hello %s', 'World'); 结果:Hello World SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); 结果:Testing one, two, three, % SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); 结果:INSERT INTO "Foo bar" VALUES('O''Reilly') SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); 结果:INSERT INTO locations VALUES(E'C:\\Program Files')

下面是使用width域和-标志的例子:

SELECT format('|%10s|', 'foo'); 结果:| foo| SELECT format('|%-10s|', 'foo'); 结果:|foo | SELECT format('|%*s|', 10, 'foo'); 结果:| foo| SELECT format('|%*s|', -10, 'foo'); 结果:|foo | SELECT format('|%-*s|', 10, 'foo'); 结果:|foo | SELECT format('|%-*s|', -10, 'foo'); 结果:|foo |

这些例子展示了position域的例子:

SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); 结果:Testing three, two, one SELECT format('|%*2$s|', 'foo', 10, 'bar'); 结果:| bar| SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); 结果:| foo|

不同于标准的 C 函数sprintf,PostgreSQL的format函数允许将带有或者不带有position域的格式说明符被混在同一个格式字符串中。一个不带有position域的格式说明符总是使用最后一个被消耗的参数的下一个参数。另外,format函数不要求所有函数参数都被用在格式字符串中。例如:

SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); 结果:Testing three, two, three

对于安全地构造动态 SQL 语句,%I和%L格式说明符特别有用。参见例 43.1。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有